package com.matrix.toolutils.common

import android.view.View
import java.util.*

/**
 * 作者：Administrator
 * 日期：2024/10/16 15:29
 * 描述：
 */
object ClickUtils {
    // 默认间隔时间
    private val DEFAULT_SPACE_TIME = 500

    // 1s间隔时间
    val SECOND_SPACE_TIME = 1000

    private val timeMap: MutableMap<Int, LongArray?> = LinkedHashMap()

    private var lastClickTime: Long = 0

    private fun ClickUtil() {}

    /**
     * 是否正常点击事件
     *
     * @param v
     * @return 非抖动的正常点击事件 返回true
     */
    fun isNormalClick(v: View): Boolean {
        return isNormalClick(v, DEFAULT_SPACE_TIME.toLong())
    }

    /**
     * 是否正常点击事件
     *
     * @param v
     * @param spaceTime 去抖动间隔时间
     * @return 非抖动的正常点击事件 返回true
     */
    fun isNormalClick(v: View, spaceTime: Long): Boolean {
        return if (timeMap.containsKey(v.id)) {
            isNormal(v, timeMap[v.id], spaceTime)
        } else {
            isNormal(v, LongArray(2), spaceTime)
        }
    }

    /**
     * 抖动点击中
     *
     * @param v
     * @return
     */
    fun isShaking(v: View): Boolean {
        return !isNormalClick(v)
    }

    /**
     * 抖动点击中
     *
     * @param v
     * @param spaceTime
     * @return
     */
    fun isShaking(v: View, spaceTime: Long): Boolean {
        return !isNormalClick(v, spaceTime)
    }

    /**
     * 是否正常点击
     *
     * @param v
     * @param time
     * @return 最近两次点击间隔时间超过500ms，则表示正常点击 返回true
     */
    private fun isNormal(v: View, time: LongArray?, spaceTime: Long): Boolean {
        System.arraycopy(time, 1, time, 0, 1)
        time!![1] = System.currentTimeMillis()
        timeMap[v.id] = time
        return if (time[1] - time[0] > spaceTime) {
            true
        } else false
    }

    /**
     * 清空数据
     */
    fun clear() {
        timeMap.clear()
    }

    /**
     * 二次点击
     *
     * @return true 不是快速点击  false 快速点击
     */
    fun isFastClick(): Boolean {
        var flag = false
        val time = System.currentTimeMillis() - lastClickTime
        if (time > 500) {
            flag = true
        }
        lastClickTime = System.currentTimeMillis()
        return flag
    }

    /**
     * 二次点击
     *
     * @return true 不是快速点击  false 快速点击
     */
    fun isFastClick(blankClickTime: Long): Boolean {
        var flag = false
        val time = System.currentTimeMillis() - lastClickTime
        if (time > blankClickTime) {
            flag = true
        }
        lastClickTime = System.currentTimeMillis()
        return flag
    }
}